package com.lh.jianzhioffer;

/**
 * @author: linghao
 * @since: 2023/2/12
 */
public class 对称的二叉树28 {

    //如果一个树的左子树与右子树镜像对称，那么这个树是对称的
    /*
    如果同时满足下面的条件，两个树互为镜像：
    它们的两个根结点具有相同的值
    每个树的右子树都与另一个树的左子树镜像对称
     */
    public boolean isSymmetric(TreeNode root) {
        return check(root,root);
    }

    private boolean check(TreeNode p,TreeNode q) {
        if(p == null && q == null)return true;
        if(p == null || q == null)return false;
        return p.val == q.val && check(p.left,q.right) && check(p.right,q.left);
    }


    public class TreeNode {
         int val;
         TreeNode left;
         TreeNode right;
         TreeNode(int x) { val = x; }
     }
}
